package com.wongoing.quartz;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

import com.jhlabs.image.HalftoneFilter;
import com.wongoing.bus.util.Constants;
import com.wongoing.quartz.job.TesterJob;
import com.wongoing.sys.model.SysTaskjob;
import com.wongoing.sys.service.SysTaskjobService;
import com.wongoing.util.LogService;
/**
 * 功能说明：@Component组件，用来暴露定时任务的统一调用方法
 * 修改说明：
 * @author 吴兆强
 * @date 2018年7月9日 上午10:27:13
 * @version V0.1
 */
@Component
public class JobManager implements ApplicationListener<ContextRefreshedEvent>  {
	@Autowired
	SysTaskjobService taskjobService;
	@Autowired
	QuartzManager quartzManager;
	
	/**
	 * 功能说明：Application Listener启动监听事件
	 * 修改说明：
	 * @author 吴兆强
	 * @date 2018年6月1日 上午9:28:40
	 * @param ev
	 */
    public void onApplicationEvent(ContextRefreshedEvent ev) {
        //防止重复执行。
        if(ev.getApplicationContext().getParent() == null){
        	LogService.getInstance(this).info(" --- Spring：onApplicationEvent --- ");
        	this.loadAllJob();
        }
    }
	
	
    /**
     * 功能说明：初始化时根据数据库配置启动定时任务
     * 修改说明：
     * @author 吴兆强
     * @date 2018年6月1日 上午9:24:29
     */
	private void loadAllJob(){
		try
		{
			Map<String,Object> param = new HashMap<String,Object>();
			param.put("jobStatus", Constants.STATUS_NORMAL);
			param.put("jobAutorun", Constants.QUARTZ_JOB_AUTORUN);
	        List<SysTaskjob> jobs = this.taskjobService.getByParam(param);
			//quartzManager.addJob("123", "123", "123", "123", TesterJob.class, "0/5 * * * * ?");
			quartzManager.enableCronSchedule(jobs);
	        System.out.println("定时任务启动完毕...");
		}
		catch(Exception ex)
		{
			LogService.getInstance(this).error("启动定时任务出错：" + ex.getMessage());
			LogService.getInstance(this).error(ex.getStackTrace());
		}
	}
}